<?php

namespace app\common\lib;

/**
 * 此处使用反射机制处理工厂模式，以后所有用到工厂模式的都可以直接对接该基础类库
 * 根据不同参数返回类库还是对象
 * Class ClassArr
 * @package app\common\lib
 */
class ClassArr
{

    public static function smsClassStat()
    {
        return [
            "ali" => "app\common\lib\sms\AliSms",
            "baidu" => "app\common\lib\sms\BaiduSms",
            "jd" => "app\common\lib\sms\JdSms",
            "tencent" => "app\common\lib\sms\TencentSms",
        ];
    }

    public static function uploadClassStat()
    {
        return [
            "text" => "xxx",
            "image" => "xxx",
        ];
    }

    public static function initClass($type, $class, $params = [], $needInstance = false)
    {
        // 如果工厂模式调用方法是静态的，返回类库 AliSms
        // 如果不是静态的，返回对象
        if (!array_key_exists($type, $class)) {
            return false;
        }
        $className = $class[$type];

        // new \ReflectionClass('A') 建立A反射类
        // ->newInstanceArgs($args) 相当于实例化A对象
        return $needInstance == true ? (new \ReflectionClass($className))->newInstanceArgs($params) : $className;
    }
}